<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2016/10/25
 * Time: 11:14
 */

namespace Home\Controller;
use Think\Controller;
use Think\Model;
use Home\Model\TicketModel;

class NotifyController extends Controller {

     public function __construct()
     {
         vendor('Alipay.Corefunction');
         vendor('Alipay.Notify');
         vendor('Alipay.Rsafunction');
     }

    function notifyurl(){

        /*
        同理去掉以下两句代码；
        */
        //require_once("alipay.config.php");
        //require_once("lib/alipay_notify.class.php");

        //这里还是通过C函数来读取配置项，赋值给$alipay_config
        $alipay_config=C('Alipay');

        //计算得出通知验证结果
        $alipayNotify = new AlipayNotify($alipay_config);
        $verify_result = $alipayNotify->verifyNotify();
        if($verify_result) {
            //验证成功
            //获取支付宝的通知返回参数，可参考技术文档中服务器异步通知参数列表
            $out_trade_no   = $_POST['out_trade_no'];      //商户订单号
            $trade_no       = $_POST['trade_no'];          //支付宝交易号
            $trade_status   = $_POST['trade_status'];      //交易状态
            $total_amount      = $_POST['total_amount'];         //交易金额
            $notify_id      = $_POST['notify_id'];         //通知校验ID。
            $notify_time    = $_POST['notify_time'];       //通知的发送时间。格式为yyyy-MM-dd HH:mm:ss。
            $gmt_close      = $_POST['gmt_close'];
            $parameter = array(
                "out_trade_no"     => $out_trade_no, //商户订单编号；
                "trade_no"     => $trade_no,     //支付宝交易号；
                "total_amount"     => $total_amount,    //交易金额；
                "trade_status"     => $trade_status, //交易状态
                "notify_id"     => $notify_id,    //通知校验ID。
                "notify_time"   => $notify_time,  //通知的发送时间。
            );
            if($_POST['trade_status'] == 'TRADE_FINISHED') {
                //
            }else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
                    $this->orderhandle($parameter);
                //进行订单处理，并传送从支付宝返回的参数；
            }
            echo "success";        //请不要修改或删除
        }else {
            //验证失败
            echo "fail";
        }
    }

    //将支付宝的订单信息发送到数据库
    public function orderhandle($parameter)
    {
        $model = M('order');
        $model->data($parameter)->add();
    }

    /*
     * 接受客户端的订单信息进行存档
     * @param int $id //用户的id
     * @param int $type //订单的类型 4为身份认证订单，10为会员支付订单
     * @param array $data //订单
     * return 订单状态信息
     */
    public function orderclient()
    {
        $model = M('pay_record');
        $type = I('post.type');
        $id = I('post.id');
        $data = I('post.data');
        $data = base64_decode($data);
        $price = $data['total_amount'];
        $str = stripslashes($data);
        $result = json_decode($str,true);
        $res = $result['alipay_trade_app_pay_response'];
        unset($res['auth_app_id']);
        unset($res['charset']);
        $res['user_id'] = $id;
        $res['type'] = $type;
        $res['time'] =date('y-m-d H:i:s',time());
        $isadd = $model->data($res)->add();
        if(!empty($isadd))
        {
            $rst = array(
                'msg'=>'data is ok',
                'statu'=>1
            );
        }else{
            $rst = array(
                'msg'=>'data is failed',
                'statu'=>2
            );
        }

        //身份认证的支付
        if($type==1)
        {
            $this->update_type($id,4);
        }else
        {
            $this->update_statu($id,2);
            $Ticket = new TicketModel();
            $Ticket->use_ticket($id,$type);
            $Ticket->add_card_time($id,$type);
        }
        $this->add_invite_info($id,$type,$price);//对邀请人进行返利金额增加
        echo json_encode($rst);
    }

//    public function ceshi()
//    {
//        $id = 366;
//        $type=2;
//        $User = new TicketModel();
//        $User->add_card_time($id,$type);
//    }

    /*
     * 付款成功后将用户的邀请信息进行判断及写入
     * @param int $id 用户的唯一识别id
     * @param string $invite_code 用户的唯一识别验证码
     * return 无返回值，将邀请用户的激活次数加一
     */
    public function add_invite_info($id,$type,$price)
    {
        $model = M('user');
        $sql = "select invite_code from wl_user where id=$id";
        $invite = $model->query($sql);
        $invite_code = $invite[0]['invite_code'];
        if(!empty($invite_code))
        {
            if($type==1)
            {
                $model->where("my_code='$invite_code'")->setInc('active_times'); // 邀请人邀请次数累积加1
                $model->where("my_code='$invite_code'")->setInc('account',10);
                $this->add_ticket($id);
            }else
            {
                $total_amount = $price*0.1;
                $model->where("my_code='$invite_code'")->setInc('account',$total_amount);
            }
        }
    }

    /*
     * 支付成功之后将给用户赠送四张优惠券
     * @param int $user_id 用户的唯一id
     * param array $data 循环写入数据库四张优惠券
     * return 进行写入操作，没有返回
     */
    public function add_ticket($user_id)
    {
//        $user_id = 270;
        $model = M('ticket');
        for($i=2;$i<6;$i++)
        {
            $data = array(
                'user_id'=>$user_id,
                'ticket_type'=>$i,
                'type'=>1,
                'add_time'=>date('y-m-d H:i:s',time())
            );
            $model->data($data)->add();
        }
    }


    /*
     * 更新身份状态为付款未认证
     * @param int $id //用户的唯一id
     * @param int $type //用户深圳状态
     * return 无返回值
     */
    public function update_type($id,$type)
    {
        $model = M('user');
        $condition['id'] = $id;
        $data['type'] = $type;
        $model->where($condition)->save($data);
    }

    //更新会员状态
    public function update_statu($id,$type)
    {
        $model = M('user');
        $condition['id'] = $id;
        $data['statu'] = $type;
        $model->where($condition)->save($data);
    }



}